# 列表
"""
列表的定义
空列表：
    在实际测试中经常需要定义空列表，存放常用的一些测试数据
        用[]定义： 列表变量名 = []
        类实例化方式定义： 列表变量名 = list()
    非空列表：
        列表变量名 = [元素1,元素2,...]
"""
# 空列表
info = []
info1 = list()
print(info)
print(info1)
# 非空列表
info2 = [34, "rts", 8.24]
print(info2)

# 列表
"""
列表元素查询：索引
    应用场景：查看列表中某个位置的元素，方便获取
    语法格式： 列表名[索引]
注：
    结果返回的是索引（也叫下标）对应列表元素，索引默认从0开始
    如果查询的索引不存在，则代码会报错
"""
# 列表元素查询
# 定义列表
name_list = ['张三', '李四', '王五']
# 按照索引查元素
# 查询李四
print(name_list[0]) # 张三
print(name_list[1]) # 李四
# 查询不存在的索引
# print(name_list[4])
# 总结：如果查询的下标（索引）不存在，则代码报错【索引超出了范围】
# IndexError: list index out of range

# 根据元素查索引
print(name_list.index("王五")) # 下标2

# 列表元素统计：元素统计
# 场景：结合列表元素去重使用
# 语法格式： 列表名.count(元素)
# 注意事项：
# 统计某元素出现的次数，如果元素不存在，返回0
# 定义列表
data_list = ['python', 'java', 'python', 'php']
# 统计python出现的次数
num = data_list.count("python")
print(num) # 次数：2
# 统计java出现次数
print(data_list.count("java")) # 次数：1
print(data_list.count("C++")) # 次数：0
# 结论：
# 统计列表元素出现的次数
# 元素不存在统计结果为0

# 列表元素增加：末尾增加元素
# 应用场景：结合循环操作给指定列表中追加数据，最终得到想要数据
# 语法格式： 列表名.append(元素)
# 注意事项：
# 列表类型属于可变类型，新增元素后，对原有数据进行了修改
# 增加元素默认会增加到列表的末尾 ,每次增加一个

# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 添加元素（末尾添加：APP自动化）
val_list.append("APP自动化")
# 查看原来列表
print(val_list)
# 增加数字元素
val_list.append(11)
print(val_list)
# 结论：
# 列表属于可变数据类型，增加元素后，原有的列表的值会发生变化
# 追加元素每次只能追加1个，而且每次追加的位置在列表的末尾

# 列表元素增加：指定位置增加元素
# 语法格式： 列表名.insert(下标,元素)
# 注意事项：
# 使用不存在的索引时，会将数据插入列表的末尾

# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 添加元素到第二个位置（APP自动化）
val_list.insert(1,"APP自动化")
# 查看原有列表
print(val_list) # ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化']
# 在上述列表的第7个位置添加元素“java”
val_list.insert(6,"java")
print(val_list) # ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化', 'java']
# 结论：
# 指定的位置如果存在，按照指定位置插入元素；如果不存在，默认添加到列表的末尾

# 列表的合并
# 语法格式1： 列表名1.extend(列表名2)
# 语法格式2： 列表1 + 列表2
# 注意事项：
# 传入的数据是列表，直接将列表每个元素追加到第一个列表中
# 传入的数据是字符串，会将字符串中每个字符追加到第一个列表中

nfo1 = [1,2,3]
info2 = [4,5,6]
# 合并
info1.extend(info2)
# 查看原来列表1
print(info1) # [1, 2, 3, 4, 5, 6]
print(info2) # [4, 5, 6]

# 列表元素删除：指定索引位置删除🏴
# 语法格式： 列表名.pop(索引)
# 注意事项：
# 删除不传入索引时，默认删除列表最后一个数据（元素）
# 删除传入的索引不存在（超出范围）时，代码报错
val_list = ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化', 'java']
# 删除下标为2对应元素
val_list.pop(2)
# 查看原有列表
print(val_list)
# 下标为空删除
val_list.pop()
print(val_list)
# 删除下标为7的元素
# val_list.pop(7) # IndexError: pop index out of range
# print(val_list)
# 结论：
# 1.下标存在直接按照指定下标删除;如果下标不存在，直接报错
# 2.如果下标不写，默认删除最后一个元素

# 列表元素删除：指定数据删除
# 语法格式： 列表名.remove(元素)
# 注意事项：
# 列表中存在多个该元素使，删除第一个匹配到的
# 如果删除的元素在列表不存在，代码会报错

val_list = ['Web自动化', 'APP自动化', 'java', 'UI自动化', '接口自动化', 'java']
# 删除：“APP自动化”
val_list.remove('APP自动化')
# 查看原有列表
print(val_list) # ['Web自动化', 'java', 'UI自动化', '接口自动化', 'java']
# 删除：java
val_list.remove('java')
print(val_list) # ['Web自动化', 'UI自动化', '接口自动化', 'java']
# 删除：python
# val_list.remove("python") # 报错：ValueError: list.remove(x): x not in list
# 总结：
# 1. 如果元素存在直接删除，如果存在多个元素默认删除第一个匹配到的
# 2. 如果元素不不存在直接删除，报错

# 列表元素修改：修改指定索引的数据
# 语法格式： 列表名[索引]=新数据
# 注意事项：
# 指定索引存在，则该位置的元素被修改，如果不存在，则代码报错
val_list = ["Web自动化", "UI自动化", "接口自动化", "APP自动化"]
# 把UI自动化修改为性能自动化
val_list[1] = "性能自动化"
# 查看原有列表
print(val_list)
# 指定下标为5的数据修改为：python
# val_list[5] = "python" # IndexError: list assignment index out of range
# 结论
# 1.下标存在直接修改对应位置的元素；下标不存在直接报错

# 列表元素反转：元素倒置（反转）
# 语法格式： 列表名.reverse()
# 注意事项：
# 对列表数据进行倒置排列
info = [8, 100, 30, 10, 40, 2]
# 反转
info.reverse()
# 查看原有列表
print(info)

# 列表元素排序：大小排列
# 语法格式： 列表名.sort(reverse=False)
# 注意事项：
# 对列表元素默认从小到大排序，即reverse=False
# 对列表元素从大到小排序，需要修改reverse=True

info = [8, 100, 30, 10, 40, 2]
# 从小到大排序
info.sort()
info.sort(reverse=False)
# 查看原有列表
print(info)
# 从大到小排序
info.sort(reverse=True)
print(info)
# 结论：
# 1.sort内部有常见两个参数，key:表示按照哪个指标排序（key的值必须是一个函数），reverse:表示排
# 序规则（升序/降序）
# 2.reverse=False表示升序（默认可以不写）；如果reverse=True表示降序

# 列表的嵌套元素获取：列表中的元素还是列表
# 列表元素本身也可以是列表，列表嵌套依旧可以用下标查询元素
student_list = [["张三", "18", "功能测试"], ["李四", "20", "自动化测试"], ["王五", "22",
["python", "java"]]]
# 获取指定的元素
# 查找元素18，如何查找？
print(student_list[0])
aa = student_list[0] # ['张三', '18', '功能测试']
print(aa[1]) # 18
# 合并起来
print(student_list[0][1]) # 18
# 查找李四
print(student_list[1][0]) # 李四
# 查找java
print(student_list[2][2][1]) # java

login_data = [
    ["13488888888", "123456", "8888"],
    ["13488888888", "666666", "8888"],
    ["13488888880", "123456", "8888"],
    ["13488888888", "123456", "0000"]
]
# 遍历
for i in login_data:
    # 判断手机号和密码
    if i[0] == "13488888888" and i[1] == "123456":

        if i[2] == "8888":
            print("登录成功")
        else:
            print("验证码错误")
    else:
        print("用户名或密码错误")

